/*************************************************
 * @autheur : CHOLLET Clément et LEMOUEL Florian *
 * @date    : 03.04.2013                         *
 * @version : 1.0 - Création de la classe        *
 * @version : 1.1 - Rajout de la sérialisation   *
 *************************************************/

#ifndef GESTIONNAIRELUMIERES_H
#define GESTIONNAIRELUMIERES_H

#include <stdlib.h>
#include "lumiere.h"

/*********************************************************************************************************************************************
 *                                                          Classe de gestion des lumières                                                   *
 *********************************************************************************************************************************************/
class GestionnaireLumieres
{
//-----------------------------------------------------Constructeurs et destructeurs-----------------------------------------------------//
private:
    //Constructeur par défaut
    GestionnaireLumieres();
public:
    //Destructeur
    ~GestionnaireLumieres();

//----------------------------------------------------------------Méthodes---------------------------------------------------------------//
private:
    void initialiser();

//---------------------------------------------------------------Accesseurs--------------------------------------------------------------//
public:
    //On récupère l'instance courante de la classe GestionnaireLumiere
    static GestionnaireLumieres& getInstance();

    //On récupère la lumière stockée à l'indice numero
    Lumiere& getLumiere(int numero);

//-------------------------------------------------------Surcharge des opérateurs--------------------------------------------------------//
public:

//--------------------------------------------------------------Attributs----------------------------------------------------------------//
private:
    //Unique instance de la classe GestionnaireLumieres
    static GestionnaireLumieres* _instance;

    //Contient toutes les lumières applicables à la scène 3D
    Lumiere* _tabLumieres[8];

    static bool initialise;

//----------------------------------------------------------------- Sérialisation -------------------------------------------------------//
private:
    friend class boost::serialization::access;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version) {
            ar & _tabLumieres;
            initialise = true;
    }
   //-----------------------------------------------------------------------------------------------------------------------------------//
};

#endif // GESTIONNAIRELUMIERES_H
